package com.blog.controller;

import com.blog.result.Result;
import com.blog.util.AliOssUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;

@RestController
@Slf4j
public class FileUploadController {

    @PostMapping("/upload")
    public Result<String> upload(@RequestParam() MultipartFile file,
                                 @RequestParam(required = false) String type) throws Exception {
         // 获取文件名
        String originalFilename = file.getOriginalFilename();
        log.info("开始上传文件{}", originalFilename);
        // 根据类型做不同的验证
        if ("image".equals(type)) {
            // 检查文件类型是否为图片（如 image/jpeg, image/png 等）
            if (!file.getContentType().startsWith("image/")) {
                return Result.error("只能上传图片文件");
            }
            // 限制图片大小不能超过 2MB
            if (file.getSize() > 2 * 1024 * 1024) {
                return Result.error("图片大小不能超过2MB");
            }
        } else if ("video".equals(type)) {
            // 检查文件类型是否为视频（如 video/mp4 等）
            if (!file.getContentType().startsWith("video/")) {
                return Result.error("只能上传视频文件");
            }
            // 限制视频大小不能超过 50MB
            if (file.getSize() > 50 * 1024 * 1024) {
                return Result.error("视频大小不能超过50MB");
            }
        }
        // 获取文件类型
        String uploadName = "video".equals(type) ? "video" : "image";
        // 保证文件的名字是唯一的，防止文件覆盖，使用uuid
        String fileName = uploadName+
                UUID.randomUUID().toString()+
                originalFilename.substring(originalFilename.lastIndexOf("."));

        try {
            String url = AliOssUtils.uploadFile(fileName, file.getInputStream());
            return Result.success(url);
        } catch (Exception e) {
            return Result.error("上传失败");
        }
    }
}
